Set Up The Map
This part is admittedly a little complicated, mostly because I added options to get the map to look exactly the way that I wanted.
Itβs not necessary to understand the code here. But I learned a lot from: https://plotly.com/r/#maps.
# a very basic map could be created with:
library(plotly)
plot_geo()
mymap <- plot_geo() %>%
layout(title = "Demonstration Map",
geo = list(showland = TRUE,
landcolor = toRGB("grey"),
showcountries = TRUE,
showocean=FALSE,
oceancolor="LightBlue",
lataxis = list(showgrid = TRUE,
gridcolor = toRGB("black")),
lonaxis = list(showgrid = TRUE,
gridcolor = toRGB("black"))))
Map Projections
Globe
mymap %>%
layout(geo = list(projection = list(type = 'orthographic')))
Mercator
Perpendicular latitude and longitude. Can be helpful in some kinds of navigation, but areas are distorted, especially as one approaches the poles.
mymap %>%
layout(geo=list(projection = list(type = 'mercator')))
Mollweide
An equal area projection.
mymap %>%
layout(geo=list(projection = list(type = 'mollweide')))
Robinson
An attempt to compromise between equal areas and a natural looking map.
mymap %>%
layout(geo=list(projection = list(type = 'robinson')))
LS0tCnRpdGxlOiAiTWFwIFByb2plY3Rpb25zIgphdXRob3I6ICJBbmR5IEdyb2dhbi1LYXlsb3IiCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OiAKICAgIGNvZGVfZG93bmxvYWQ6IHllcwogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBjc3M6IFVNLmNzcwogICAgaGlnaGxpZ2h0OiBoYWRkb2NrCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiBubwogICAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSkKCmBgYAoKIyBTZXQgVXAgVGhlIE1hcAoKPiBUaGlzIHBhcnQgaXMgYWRtaXR0ZWRseSBhIGxpdHRsZSBjb21wbGljYXRlZCwgbW9zdGx5IGJlY2F1c2UgSSBhZGRlZCBvcHRpb25zIHRvIGdldCB0aGUgbWFwIHRvIGxvb2sgZXhhY3RseSB0aGUgd2F5IHRoYXQgSSB3YW50ZWQuIAoKPiBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBoZXJlLiBCdXQgSSBsZWFybmVkIGEgbG90IGZyb206IFtodHRwczovL3Bsb3RseS5jb20vci8jbWFwc10oaHR0cHM6Ly9wbG90bHkuY29tL3IvI21hcHMpLgoKYGBge3J9CgpsaWJyYXJ5KHBsb3RseSkKCmBgYAoKYGBge3IsIGVjaG89VFJVRSwgZXZhbD1GQUxTRX0KCiMgYSB2ZXJ5IGJhc2ljIG1hcCBjb3VsZCBiZSBjcmVhdGVkIHdpdGg6IAoKbGlicmFyeShwbG90bHkpCgpwbG90X2dlbygpCgpgYGAKCgpgYGB7cn0KCm15bWFwIDwtIHBsb3RfZ2VvKCkgJT4lCiAgbGF5b3V0KHRpdGxlID0gIkRlbW9uc3RyYXRpb24gTWFwIiwgCiAgICAgICAgIGdlbyA9IGxpc3Qoc2hvd2xhbmQgPSBUUlVFLCAgCiAgICAgICAgICAgICAgICAgICAgbGFuZGNvbG9yID0gdG9SR0IoImdyZXkiKSwKICAgICAgICAgICAgICAgICAgICBzaG93Y291bnRyaWVzID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICBzaG93b2NlYW49RkFMU0UsIAogICAgICAgICAgICAgICAgICAgIG9jZWFuY29sb3I9IkxpZ2h0Qmx1ZSIsCiAgICAgICAgICAgICAgICAgICAgbGF0YXhpcyA9IGxpc3Qoc2hvd2dyaWQgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRjb2xvciA9IHRvUkdCKCJibGFjayIpKSwKICAgICAgICAgICAgICAgICAgICBsb25heGlzID0gbGlzdChzaG93Z3JpZCA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZGNvbG9yID0gdG9SR0IoImJsYWNrIikpKSkgCgpgYGAKCiMgTWFwIFByb2plY3Rpb25zCgojIyBHbG9iZQoKYGBge3J9CgpteW1hcCAlPiUgCiAgbGF5b3V0KGdlbyA9IGxpc3QocHJvamVjdGlvbiA9IGxpc3QodHlwZSA9ICdvcnRob2dyYXBoaWMnKSkpCgpgYGAKCiMjIE1lcmNhdG9yIAoKPiBQZXJwZW5kaWN1bGFyIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUuIENhbiBiZSBoZWxwZnVsIGluIHNvbWUga2luZHMgb2YgbmF2aWdhdGlvbiwgYnV0IGFyZWFzIGFyZSBkaXN0b3J0ZWQsIGVzcGVjaWFsbHkgYXMgb25lIGFwcHJvYWNoZXMgdGhlIHBvbGVzLgoKYGBge3J9CgpteW1hcCAlPiUgCiAgbGF5b3V0KGdlbz1saXN0KHByb2plY3Rpb24gPSBsaXN0KHR5cGUgPSAnbWVyY2F0b3InKSkpCgpgYGAKCiMjIE1vbGx3ZWlkZQoKPiBBbiAqZXF1YWwgYXJlYSogcHJvamVjdGlvbi4KCmBgYHtyfQoKbXltYXAgJT4lIAogIGxheW91dChnZW89bGlzdChwcm9qZWN0aW9uID0gbGlzdCh0eXBlID0gJ21vbGx3ZWlkZScpKSkKCmBgYAoKIyMgUm9iaW5zb24KCj4gQW4gYXR0ZW1wdCB0byBjb21wcm9taXNlIGJldHdlZW4gZXF1YWwgYXJlYXMgYW5kIGEgbmF0dXJhbCBsb29raW5nIG1hcC4KCmBgYHtyfQoKbXltYXAgJT4lIAogIGxheW91dChnZW89bGlzdChwcm9qZWN0aW9uID0gbGlzdCh0eXBlID0gJ3JvYmluc29uJykpKQoKYGBgCgoK